/**
 * 随机生成扁平化树形结构数据
 * @param {number} num - 生成的条数 默认200
 * @returns {Array} 扁平化树形结构数据
 */
export function generateFlatTreeData(num = 200) {
  // 国家地区
  const countries = [
    { name: "美国", code: "US" },
    { name: "中国", code: "CN" },
    { name: "德国", code: "DE" },
    { name: "阿联酋", code: "AE" },
    { name: "法国", code: "FR" },
  ];
  // 航空公司
  const airlines = {
    CN: ["中国国航", "东方航空", "南方航空", "四川航空"],
    US: ["达美航空", "美国航空", "联合航空"],
    DE: ["汉莎航空"],
    AE: ["阿联酋航空"],
    FR: ["法国航空"],
  };
  const aircraftTypes = [
    "空客A320neo",
    "空客A350-900",
    "空客A380",
    "波音737 MAX 8",
    "波音777-300ER",
    "波音787-9",
    "COMAC C919",
  ];

  // 生成注册号（测试用，实际注册号有具体算法）
  function getRegNumRandom() {
    return `TEST-B-${(Math.random() * 10000)
      .toFixed(0)
      .padStart(4, "0")}-${Math.floor(10000 + Math.random() * 90000)}`;
  }
  /**
   * 生成 [min, max] 范围内的随机整数
   * @param {number} min - 最小值（包含）
   * @param {number} max - 最大值（包含）
   * @returns {number} 随机整数
   */
  function getRandomInt(min, max) {
    if (min === max) return min;
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
  }

  let data = [];
  for (let i = 0; i < num; i++) {
    let regNum = getRegNumRandom();
    let countryIndex = getRandomInt(0, countries.length - 1);
    let countryAirlines = airlines[countries[countryIndex].code];
    let airline = countryAirlines[getRandomInt(0, countryAirlines.length - 1)];
    let aircraftTypeIndex = getRandomInt(0, aircraftTypes.length - 1);
    let obj = {
      id: `global_id_${i + 1}`,
      aircraftName: regNum,
      regNum: regNum,
      countryCode: countries[countryIndex].code,
      airline: airline,
      aircraftTypes: aircraftTypes[aircraftTypeIndex],
      orderNum: getRandomInt(1, 4),
    };
    data.push(obj);
  }
  return { countries, airlines, aircraftTypes, data };
}
/**
 * 根据传入的key 将数组分组
 * @param {Array} array - 需要分组的数组
 * @param {String} key - 根据哪个字段分组
 * @returns {Object} 分组后的对象
 */
export function groupBy(array, key) {
  let obj = {};
  array.forEach((item) => {
    if (!obj[item[key]]) {
      obj[item[key]] = [item];
    } else {
      obj[item[key]].push(item);
    }
  });
  return obj;
}
